#!/usr/bin/env python3
"""
Qwen-VL-Max 图像分析器的使用示例
"""

import os
from Qwen_VL_image import QwenVLAnalyzer

def analyze_multiple_images():
    """
    使用不同提示分析多张图像的示例
    """
    # 从环境变量获取 API 密钥
    api_key = os.getenv("DASHSCOPE_API_KEY")
    
    if not api_key:
        print("请设置 DASHSCOPE_API_KEY 环境变量")
        return
    
    # 初始化分析器
    analyzer = QwenVLAnalyzer(api_key)
    
    # 要分析的图像列表
    images = [
        "img/train1.jpeg",
        "img/train2.jpeg", 
        "img/train17.jpeg"
    ]
    
    # 不同类型分析的不同提示
    prompts = [
        "详细描述这张图片，包括物体、人物、动作和场景。",
        "这张图片中发生了什么？专注于主要动作或事件。",
        "分析这张图片的视觉元素，包括颜色、构图和氛围。"
    ]
    
    for i, (image_path, prompt) in enumerate(zip(images, prompts)):
        if not os.path.exists(image_path):
            print(f"未找到图像: {image_path}")
            continue
            
        print(f"\n{'='*60}")
        print(f"图像 {i+1}: {image_path}")
        print(f"提示: {prompt}")
        print(f"{'='*60}")
        
        try:
            description = analyzer.get_image_description(image_path, prompt)
            print("描述:")
            print(description)
        except Exception as e:
            print(f"分析 {image_path} 时出错: {str(e)}")

def analyze_single_image_with_custom_prompt():
    """
    使用自定义提示分析单张图像的示例
    """
    api_key = os.getenv("DASHSCOPE_API_KEY")
    
    if not api_key:
        print("请设置 DASHSCOPE_API_KEY 环境变量")
        return
    
    analyzer = QwenVLAnalyzer(api_key)
    image_path = "img/train1.jpeg"
    
    if not os.path.exists(image_path):
        print(f"未找到图像: {image_path}")
        return
    
    # 特定分析的自定义提示
    custom_prompt = """
    请分析这张图片并提供：
    1. 您看到的内容的一般描述
    2. 图像中可见的任何文字或标志
    3. 整体氛围或情绪
    4. 任何值得注意的细节或物体
    """
    
    print(f"正在分析: {image_path}")
    print(f"自定义提示: {custom_prompt}")
    print("-" * 50)
    
    try:
        description = analyzer.get_image_description(image_path, custom_prompt)
        print("分析结果:")
        print(description)
    except Exception as e:
        print(f"错误: {str(e)}")

def analyze_with_different_models():
    """
    使用不同模型参数的示例
    """
    api_key = os.getenv("DASHSCOPE_API_KEY")
    
    if not api_key:
        print("请设置 DASHSCOPE_API_KEY 环境变量")
        return
    
    analyzer = QwenVLAnalyzer(api_key)
    image_path = "img/train1.jpeg"
    
    if not os.path.exists(image_path):
        print(f"未找到图像: {image_path}")
        return
    
    print(f"正在分析: {image_path}")
    print("使用不同的模型参数...")
    print("-" * 50)
    
    # 测试不同的提示和参数
    test_cases = [
        {
            "name": "创意描述",
            "prompt": "请用富有创意的方式描述这张图片，发挥您的想象力。",
            "temperature": 0.9,
            "max_tokens": 500
        },
        {
            "name": "技术分析",
            "prompt": "请从技术角度分析这张图片的构图、光线和色彩。",
            "temperature": 0.3,
            "max_tokens": 800
        },
        {
            "name": "情感解读",
            "prompt": "这张图片传达了什么情感？请分析其中的情感元素。",
            "temperature": 0.7,
            "max_tokens": 600
        }
    ]
    
    for i, test_case in enumerate(test_cases):
        print(f"\n测试案例 {i+1}: {test_case['name']}")
        print(f"提示: {test_case['prompt']}")
        print(f"温度: {test_case['temperature']}, 最大令牌: {test_case['max_tokens']}")
        print("-" * 30)
        
        try:
            # 临时修改分析器的参数
            original_temp = analyzer.analyze_image.__defaults__[1] if analyzer.analyze_image.__defaults__ else 0.7
            original_tokens = 1000
            
            # 这里可以扩展分析器类来支持动态参数
            description = analyzer.get_image_description(image_path, test_case['prompt'])
            print("结果:")
            print(description)
            
        except Exception as e:
            print(f"错误: {str(e)}")

if __name__ == "__main__":
    print("Qwen-VL-Max 图像分析示例")
    print("=" * 50)
    
    # 示例 1: 使用不同提示分析多张图像
    print("\n1. 使用不同提示分析多张图像...")
    analyze_multiple_images()
    
    # 示例 2: 自定义提示分析
    print("\n2. 自定义提示分析...")
    analyze_single_image_with_custom_prompt()
    
    # 示例 3: 不同模型参数分析
    print("\n3. 不同模型参数分析...")
    analyze_with_different_models()
